home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Epson;
- CONST
- {$I GEMCONST.PAS}
- TYPE
- {$I GEMTYPE.PAS}
-
- {$I GEMSUBS.PAS}
- {$I CURSOR.PAS}
- PROCEDURE Do_Main;
- CONST
- KCmdFileName = 'A:\PRTSTUPA.INF';
- Bel = 7; {ASCII}
- ESC = 27; {ASCII}
- W = 63;
- H = 21;
- NoBorder = 0;
- Blk = 384;
- VAR
- OutFile : text;
- CmdFileName : string;
- S : ARRAY[1..70] OF string[20];
- Title : string;
- ButtonArr : ARRAY [1..70] OF integer;
- ButtonSelected : ARRAY [1..70] OF boolean;
- ButtonIx : integer;
- EditNumber : ARRAY [50..55] OF integer;
- junk : integer;
- Box : dialog_ptr; {main menu}
- ExoticaBox : dialog_ptr;
- ExoticButtonArr : ARRAY [1..20] OF integer;
- ExoticaDrawn : boolean;
- Pushed, i : integer;
- x, y : integer;
- j, MyNumber : integer;
- CC : PACKED ARRAY[1..511] OF char;
- ExoticaCC : PACKED ARRAY [1..30] OF char;
- NbrCharOfExotica : integer;
- NbrCharInCC : integer;
- NationCode : integer;
- DebugSet : SET OF 1..20;
-
- PROCEDURE Abort
- (ReasonCode : integer);
- BEGIN
- WriteLn('Abort. Reason code:',ReasonCode);
- ReadLn;
- HALT;
- END {abort};
-
- FUNCTION OutPtr
- (ch : char)
- : long_integer;
- GEMDOS ($05);
-
- PROCEDURE StringToInteger
- (VAR Str : string;
- VAR Result : integer;
- NbrChar : integer);
- {If string is not right justified, return a value of zero.
- It ends up being a mind reading job to try to determine what the
- user wanted in the other cases.}
- VAR
- Class : integer;
- Item, i : integer;
- BCD : ARRAY [1..3] OF integer;
-
- FUNCTION Digit
- (Str : string)
- : boolean;
- {Test to see if Str[i] is a BCD digit.}
- VAR Nbr : integer;
- BEGIN
- Nbr := ORD(Str[1]) - ORD('0');
- IF (Nbr >= 0) AND (Nbr <= 9)
- THEN Digit := TRUE
- ELSE Digit := FALSE;
- END {digit};
-
- BEGIN {stringtointeger}
- IF NbrChar = 2 THEN
- Insert('*',Str,1); {Class can only be 0 - 3}
- {Classify the pattern as to digit, non- digit. 1 in following
- code represents a digit};
- Class := 0;
- FOR i := 1 TO 3 DO
- IF Digit(Str[i]) THEN
- BEGIN
- CASE i OF
- 1 : Class := Class + 4;
- 2 : Class := Class + 2;
- 3 : CLass := Class + 1;
- END {case};
- BCD[i] := ORD(Str[i]) - ORD('0');
- END;
- (*writeln('class:',class,'str:',str[1],str[2],str[3]);*)
- CASE Class OF
- 1 : Result := BCD[3];
- 3 : Result := BCD[2] * 10 + BCD[3];
- 7 : Result := BCD[1] * 100 + BCD[2] * 10 + BCD[3];
- 0,2,4,5,6 : Result := 0;
- END {case};
- END {stringtointeger};
-
- PROCEDURE PrintCommandCodes;
- VAR i : integer;
- BEGIN
- FOR i := 1 TO NbrCharInCC DO
- BEGIN
- IF (CC[i] = CHR(ESC)) OR (CC[i] = CHR(BEL)) THEN
- WriteLn;
- IF CC[i] > ' '
- THEN Write(i,':',CC[i])
- ELSE Write(i,':',ORD(CC[i]));
- Write(' ');
- END;
- WriteLn;
- END {printcommandcodes};
-
- PROCEDURE FormPrinterCommands;
- VAR
- i, j : integer;
- MSCode : integer;
-
- PROCEDURE ComputeMasterSelectCode
- (VAR N : integer);
- BEGIN
- N := 0;
- IF ButtonSelected[2 ] THEN N := N + 4 ;
- IF ButtonSelected[3 ] THEN N := N + 1 ;
- {Pica = 0, do nothing.}
- IF ButtonSelected[5 ] THEN N := N + 32 ;
- IF ButtonSelected[7 ] THEN N := N + 16 ;
- IF ButtonSelected[8 ] THEN N := N + 8 ;
- IF ButtonSelected[12] THEN N := N + 64 ;
- IF ButtonSelected[13] THEN N := N + 128 ;
- END {computemasterselectcode};
-
- PROCEDURE ProcessPerforations;
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'C';
- IF ButtonSelected[37] {inches}
- THEN
- BEGIN
- IF EditNumber[50] > 22 THEN
- EditNumber[50] := 22;
- IF EditNumber[50] < 1 THEN
- EditNumber[50] := 1;
- CC[i + 2] := CHR(0);
- CC[i + 3] := CHR(EditNumber[50]);
- i := i + 4;
- END
- ELSE
- BEGIN {Lines}
- IF EditNumber[51] < 1 THEN
- EditNumber[51] := 1;
- IF EditNumber[51] > 127 THEN
- EditNumber[51] := 127;
- CC[i + 2] := CHR(EditNumber[51]);
- i := i + 3;
- END;
-
- {skip perforations}
- IF ButtonSelected[29]
- THEN
- BEGIN
- CC[i] := CHR(ESC); {Number of lines to skip}
- CC[i + 1] := 'N';
- CC[i + 2] := CHR(EditNumber[52]);
- i := i + 3;
- END
- ELSE {Atari mode. Write on the damn perforations!}
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'O';
- i := i + 2;
- END;
- END {processperorations};
-
- BEGIN {formprintercommands}
- {Generate the command codes
- in a character array called CC. The index on CC is i.
- Each procedure reads and writes CC and i as it wishes.
- At the call, i identifies the next character to enter.}
- FOR i := 1 TO 511 DO
- CC[i] := CHR(0); {ASCII null }
- i := 1;
- {reset}
- CC[i] := CHR(ESC);
- CC[i + 1] := '@';
- i := i + 2;
-
- {master select}
- CC[i] := CHR(ESC);
- CC[i + 1] := '!';
- ComputeMasterSelectCode(MSCode);
- CC[i + 2] := CHR(MSCode);
- i := i + 3;
-
- {NLQ}
- IF ButtonSelected[10] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'x';
- CC[i + 2] := '1';
- i := i + 3;
- END;
-
- {script}
- IF ButtonSelected[16] OR ButtonSelected[17] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'S';
- i := i + 3;
- IF ButtonSelected[16]
- THEN CC[i + 2] := '0'
- ELSE CC[i + 2] := '1';
- END;
-
- ProcessPerforations;
-
- {line spacing}
- IF ButtonSelected[19] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := '1';
- i := i + 2;
- END;
- IF ButtonSelected[20] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := '0';
- i := i + 2;
- END;
- IF ButtonSelected[21] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := '2';
- i := i + 2;
- END;
- IF ButtonSelected[22] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := '3';
- CC[i + 2] := CHR(EditNumber[55]);
- i := i + 3;
- END;
-
- {paper out sensor}
- IF ButtonSelected[23] THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := '8';
- i := i + 2;
- END;
-
- {Left margin}
- CC[i] := CHR(ESC);
- CC[i + 1] := 'l';
- CC[i + 2] := CHR(EditNumber[54]);
- i := i + 3;
-
- {language choice}
- CC[i] := CHR(ESC);
- CC[i + 1] := 'R';
- CC[i + 2] := CHR(NationCode);
- i := i + 3;
-
- {--------------------------------------------------------------}
- {from the exotica menu}
- FOR j := 1 TO NbrCharOfExotica DO
- BEGIN
- CC[i] := ExoticaCC[j];
- i := i + 1;
- END;
-
- {sound beeper to indicate success}
- CC[i] := CHR(7); {ASCII Bel}
- i := i + 1;
-
- {done}
- {Next character is a null because of initializing done at begin.}
- NbrCharInCC := i - 1;
- (*Writeln('number char in cc:',nbrcharincc);*)
- (*PrintCommandCodes;*)
- END {formprintercommands};
-
- PROCEDURE SendCommandsToPrinter;
- VAR
- i : integer;
- Status : long_integer;
-
- BEGIN
- FOR i := 1 TO NbrCharInCC DO
- BEGIN
- Status := Outptr(CC[i]);
- IF Status = 0 THEN
- Abort(8191);
- END;
- END {sendcommandstoprinter};
-
- PROCEDURE SndCommandsToFile;
- VAR i : integer;
- BEGIN
- REWRITE(OutFile,CmdFileName);
- FOR i := 1 TO NbrCharInCC DO
- Write(OutFile,CC[i]);
- WriteLn(OutFile);
- Close(OutFile);
- END {sndcommandstofile} ;
-
- PROCEDURE PrintTwoLines;
- CONST
- LF = 10;
- CR = 13;
- VAR
- ch : char;
- i : integer;
-
- PROCEDURE Output(ch : char);
- VAR
- Status : long_integer;
- BEGIN
- Status := OutPtr(ch);
- IF Status = 0 THEN
- Abort(8192);
- END {output} ;
-
- BEGIN {printtwolines}
- FOR i := 0 TO 25 DO
- OutPut(CHR(i + ORD('a')));
- OutPut(CHR(LF));
- OutPut(CHR(CR));
- FOR i := 0 TO 25 DO
- OutPut(CHR(i + ORD('A')));
- OutPut(CHR(LF));
- OutPut(CHR(CR));
- END {printtwolines};
-
- FUNCTION MakeButton
- (X : integer;
- Y : integer;
- Nchar : integer;
- S : string;
- ExitBtn : boolean)
- : integer;
- VAR
- Nbr : integer;
- ButtonType : integer;
- BEGIN
- IF ExitBtn
- THEN ButtonType := Selectable | Exit_Btn
- ELSE ButtonType := Selectable;
-
- Nbr := Add_DItem(Box,G_Button,ButtonType,
- x,y,Nchar,1, NoBorder,Blk);
- Set_DText(Box,Nbr,S, System_Font,TE_Left);
- MakeButton := Nbr;
- END {makebutton};
-
- FUNCTION GetEditableLine
- (x : integer;
- y : integer;
- Nchar : integer;
- Sample : string)
- : integer;
- VAR
- Nbr : integer;
- BEGIN
- Nbr := Add_DItem(Box, G_FText,Editable,
- x,y,Nchar,1, NoBorder,Blk);
- Set_DEdit(Box,Nbr,
- '__', '99', Sample,
- System_Font, TE_Left);
- GetEditableLine := Nbr;
- END {geteditableline};
-
- PROCEDURE MakeText
- (X : integer;
- Y : integer;
- Nchar : integer;
- S : string);
- BEGIN
- Junk := Add_DItem(Box,G_String,None,
- X,Y,NChar,1, NoBorder,Blk);
- Set_DText(Box,junk,S,System_Font,TE_Left);
- END {maketext};
-
- PROCEDURE InitializeButtons;
- VAR
- ButtonsSet : SET OF 1..70;
- i : 1..70;
- BEGIN
- FOR i := 1 TO 70 DO
- ButtonSelected[i] := FALSE;
- ButtonsSet := [4,15,21,24,37];
- FOR i := 1 TO 49 DO
- WHILE i IN ButtonsSet DO
- BEGIN
- Obj_SetState(Box,ButtonArr[i], Selected,
- FALSE {redraw needed ? } );
- ButtonSelected[i] := TRUE;
- ButtonsSet := ButtonsSet - [i];
- END;
- END {initializebuttons};
-
- PROCEDURE ChangeMutuallyExclusive
- (This,First,Last : integer;
- Box : dialog_ptr);
- VAR
- i : integer;
- BEGIN
- FOR i := First To Last DO
- BEGIN
- Obj_SetState(Box,ButtonArr[i],Normal,TRUE);
- END;
- Obj_SetState(Box,ButtonArr[This],Selected,TRUE);
- (*FOR i := first to last do
- writeln(i,':',buttonselected[i]);*)
- END {changemutuallyexclusive};
-
- PROCEDURE ConvertGEMNbrtoMyNbr
- (GEMNbr : integer; {the number returned by
- calls to Add_DItem}
- VAR MyNbr : integer); {The number used to store text strings
- and address arrays. MyNbr[2] refers to
- 'Compressed'}
- VAR
- i : integer;
- BEGIN
- FOR i := 1 TO 50 DO
- IF ButtonArr[i] = GEMNbr THEN
- MyNbr := i;
- END {covertGEMnbrtomynbr};
-
- PROCEDURE FillStringsWithText;
- BEGIN
- Title := 'Penultimate Printer Setter Upper';
- s[1] := 'PITCH';
- S[2] := 'Compressed';
- S[3] := 'Elite';
- S[4] := 'Pica';
- S[5] := 'Expanded';
-
- S[6] := 'BOLDNESS';
- S[7] := 'DoubleStrike';
- S[8] := 'Emphasized';
-
- s[9] := 'QUALITY';
- S[10] := 'NLQ';
-
- s[11] := 'EFFECTS';
- s[12] := 'Italic';
- s[13] := 'Underline';
-
- s[14] := 'SCRIPT';
- s[15] := 'Normal';
- s[16] := 'Super';
- s[17] := 'Sub';
-
- s[18] := 'LINE SPACING';
- s[19] := '7 / 72';
- s[20] := '1 / 8';
- s[21] := '1 / 6';
- s[22] := 'n / 216';
-
- s[38] := 'PAPER OUT SENSOR';
- s[23] := 'OFF';
- s[24] := 'ON';
-
- s[25] := 'FORM LENGTH';
- s[26] := 'inches';
- s[27] := 'char.';
- s[28] := 'skip(char)';
- s[29] := 'Skip perforations';
-
- s[30] := 'LEFT MARGIN';
-
- s[31] := 'DO AND RETURN';
- s[32] := 'Print test line';
- s[33] := 'Form Feed';
-
- s[36] := 'Character set';
-
- s[42] := 'HELP';
- s[34] := 'Cancel';
- s[35] := 'Do it';
- s[39] := 'Save File';
- s[41] := 'Exotica';
-
-
- END {fillstringswithtext};
-
- PROCEDURE FillButtonSelectedArray;
- VAR i, j :integer;
- BEGIN
- FOR j := 1 TO 50 DO
- BEGIN
- i := ButtonArr[j];
- IF Obj_State(box,i) & Selected <> 0
- THEN ButtonSelected[j] := TRUE
- ELSE ButtonSelected[j] := FALSE;
- (*Writeln(j,':',ButtonSelected[j]);*)
- END;
- END {fillbuttonselectedarray};
-
- PROCEDURE DisplayOptions;
- VAR
- i, j : integer;
- BoxRedrawNeeded : boolean;
-
- PROCEDURE ProcessButtonPush;
-
- PROCEDURE MakeText
- (Box : dialog_ptr;
- X : integer;
- Y : integer;
- Nchar : integer;
- S : string);
- BEGIN
- Junk := Add_DItem(Box,G_String,None,
- X,Y,NChar,1, NoBorder,Blk);
- Set_DText(Box,junk,S,System_Font,TE_Left);
- END {maketext};
-
- FUNCTION MakeButton
- (Box : dialog_ptr;
- X : integer;
- Y : integer;
- Nchar : integer;
- S : string;
- ExitBtn : boolean)
- : integer;
- VAR
- Nbr : integer;
- ButtonType : integer;
- BEGIN
- IF ExitBtn
- THEN ButtonType := Selectable | Exit_Btn
- ELSE ButtonType := Selectable;
-
- Nbr := Add_DItem(Box,G_Button,ButtonType,
- x,y,Nchar,1, NoBorder,Blk);
- Set_DText(Box,Nbr,S, System_Font,TE_Left);
- MakeButton := Nbr;
- END {makebutton};
-
- PROCEDURE ShowInternationalMenu;
-
- PROCEDURE DisplayCharacterSets;
- CONST
- w = 55;
- h = 19;
- VAR
- CharSetBox : dialog_ptr;
- S : ARRAY[1..20] OF string[45];
- IntlButtArr : ARRAY [1..20] OF integer;
- i, x, y : integer;
- CharPushed : integer;
-
- PROCEDURE SelectNewButton
- (ButtonNbr : integer);
- VAR
- i : integer;
- GemNbr : integer;
- BEGIN
- FOR i := IntlButtArr[1] TO IntlButtArr[11] DO
- Obj_SetState(CharSetBox,i,Normal,TRUE);
- FOR i := 1 TO 11 DO
- IF ButtonNbr = IntlButtArr[i] THEN
- GemNbr := IntlButtArr[i];
- Obj_SetState(CharSetBox,ButtonNbr,Selected,TRUE);
- END {selectnewbutton};
-
- PROCEDURE ConvertChoiceToEpsonCode;
- VAR i, Choice : integer;
- BEGIN
- {Convert from button index to Epson code.}
- FOR i := 1 TO 11 DO
- IF (Obj_State(CharSetBox,IntlButtArr[i]) & Selected) > 0
- THEN Choice := i;
- CASE Choice OF {nationcode is global}
- 1 : NationCode := 4;
- 2 : NationCode := 10;
- 3 : NationCode := 1;
- 4 : NAtionCode := 2;
- 5 : NationCode := 6;
- 6 : NationCode := 8;
- 7 : NationCode := 9;
- 8 : NationCode := 7;
- 9 : NationCode := 5;
- 10 : NationCode := 3;
- 11 : NationCode := 0;
- END {case};
-
- END {convertchoicetoEpsoncode};
-
- PROCEDURE PrintLanguageSample;
- BEGIN
- ConvertChoiceToEpsonCode;
- FormPrinterCommands;
- SendCommandsToPrinter;
- WriteLn(' # $ @ [ \ ] ^ ` { | } ` ' );
- WriteLn;
- IF NationCode = 1 {France}
- THEN WriteLn(' ',
- 'Blaise Pascal - Math{maticien, c{l}bre Fran\ais.' );
- Obj_SetState(CharSetBox,IntlButtArr[16],Normal,TRUE);
- Obj_SetState(Box,ButtonArr[34],Disabled,FALSE);
- END {printlanguagesample};
-
- BEGIN {displaycharactersets}
- FOR i := 1 TO 20 DO
- IntlButtArr[i] := 0;
- CharSetBox := New_Dialog(20, 0,0,w,h);
- S[ 1] := 'Denmark I';
- S[ 2] := 'Denmark II';
- S[ 3] := 'France';
- S[ 4] := 'Germany';
- S[ 5] := 'Italy';
- S[ 6] := 'Japan';
- S[ 7] := 'Norway';
- S[ 8] := 'Spain';
- S[ 9] := 'Sweden';
- S[10] := 'UK';
- S[11] := 'USA';
- S[12] := 'RETURN';
- S[13] := 'The following ASCII characters are redefined';
- S[14] := ' with choices other than USA:';
- S[15] := ' # $ @ [ | ] ^ ` { | } ~';
- S[16] := 'TEST PRINT';
-
- {header}
- x := 5; y := 1;
- MakeText(CharSetBox,x ,y , 45, s[13]);
- MakeText(CharSetBox,x ,y + 1 , 45, s[14]);
- MakeText(CharSetBox,x ,y + 2 , 45, s[15]);
- {left side}
- x := 10; y := 5;
- FOR i := 1 TO 6 DO
- IntlButtArr[i] := MakeButton(CharSetBox,x, y + i , 12,S[i],TRUE);
- {right side}
- x := 32; y := 5;
- FOR i := 7 to 11 DO
- IntlButtArr[i] := MakeButton(CharSetBox,x,y + i - 6,12, s[i],TRUE);
- {select USA}
- x := 22; y := 14;
- Obj_SetState(CharSetBox,IntlButtArr[11],Selected,FALSE);
- {test print}
- IntlButtArr[16] := MakeButton(CharSetBox,x ,y , 12, s[16],
- TRUE);
- {RETURN button}
- IntlButtArr[12] := Add_DItem(CharSetBox,G_Button,
- Selectable | Exit_Btn | Default,
- x + 2, y + 2, 8, 1, NoBorder,Blk);
- Set_DText(CharSetBox,IntlButtArr[12],s[12],System_Font,TE_Left);
- {teaser}
- x := 43; y := 18;
- junk := Add_DItem(CharSetBox,G_String,None,
- x,y,10,1, NoBorder,Blk);
- Set_DText(CharSetBox,junk,'Try French',
- Small_Font,{prints normal font!}TE_Left);
-
- Center_Dialog(CharSetBox);
- CharPushed := Do_Dialog(CharSetBox,0);
- WHILE CharPushed <> IntlButtArr[12] DO
- BEGIN
- CASE CharPushed = IntlButtArr[16] {test print} OF
- TRUE : PrintLanguageSample;
- FALSE : SelectNewButton(CharPushed);
- END {case};
- {Wait for another push.}
- CharPushed := Redo_Dialog(CharSetBox,0);
- END;
- End_Dialog(CharSetBox);
- ConvertChoiceToEpsonCode;
- END {displaycharactersets};
-
- BEGIN {showinternationalmenu}
- {Get rid (temporarily) of the main menu.}
- End_Dialog(Box);
- {Display the character set menu.}
- DisplayCharacterSets;
- Obj_SetState(Box,ButtonArr[36],Normal,FALSE);
- BoxRedrawNeeded := TRUE;
- END {showinternationalmenu};
-
- PROCEDURE ShowExotica;
- CONST
- w = 40;
- h = 23;
-
- PROCEDURE DisplayExotica;
- VAR
- i : integer;
- S : ARRAY[1..20] OF string[30];
- x,y, Nbr,LastCh : integer;
-
- BEGIN
- ExoticaBox := New_Dialog(20, 0,0,w,h);
- FOR i := 1 TO 20 DO
- ExoticButtonArr[i] := 0;
- s[1] := 'Set Right Margin'; { [20] is editable number}
- s[2] := 'Unidirectional Mode';
- s[3] := 'Graphics Char. Set';
- s[4] := 'Half-speed Mode';
- s[5] := 'Last char in FN'; {[19] is editable char}
-
- s[7] := 'About This Program';
-
- s[10] := 'Cut-sheet Feeder';
- s[11] := 'OFF';
- s[12] := 'ON';
- s[13] := 'Return';
-
- s[14] := 'The Graphics character set';
- s[15] := 'Redefines CHR(128) - CHR(159)';
-
- x := 9; y := 1;
- FOR i := 1 TO 5 DO
- ExoticButtonArr[i] := MakeButton(ExoticaBox,x,Y + i, 21,
- s[i],FALSE);
- Nbr := Add_DItem(ExoticaBox,G_FText,Editable,
- x + 22, y + 1 ,3, 1, NoBorder,Blk);
- Set_DEdit(ExoticaBox,Nbr,
- '___','999','___',
- System_Font,TE_Left);
- ExoticButtonArr[20] := Nbr;
- LastCh := Add_DItem(ExoticaBox,
- G_FText,Editable,
- x + 22 ,y + 5,1,1, NoBorder,Blk);
- Set_DEdit(ExoticaBox,LastCh,
- '_','a','A',
- System_Font,TE_Left);
- ExoticButtonArr[19] := LastCh;
- {about this program}
- x := 9; y := 7;
- FOR i := 7 TO 7 DO
- ExoticButtonArr[i] := MakeButton(ExoticaBox,x, y + i - 5,
- 21, s[i],TRUE);
- {cut-sheet feeder}
- x := 12; y := 11;
- MakeText(ExoticaBox,x,y,18, s[10]);
- ExoticButtonArr[11] := MakeButton(ExoticaBox,x, y + 1, 5,
- s[11],TRUE);
- ExoticButtonArr[12] := MakeButton(ExoticaBox,x + 7, y + 1, 5,
- s[12],TRUE);
- Obj_SetState(ExoticaBox,ExoticButtonArr[11],Selected,FALSE);
- {return}
- x := 15; y := 14;
- ExoticButtonArr[13] := Add_DItem(ExoticaBox,G_Button,
- Selectable | Exit_btn | Default,
- x,y,8,1, NoBorder,Blk);
- Set_DText(ExoticaBox,ExoticButtonArr[13],s[13],
- System_Font,TE_Left);
- {notes}
- x := 6; y := 17;
- MakeText(ExoticaBox,x,y, 18,s[14]);
- MakeText(ExoticaBox,x,y + 1, 18,s[15]);
- Center_Dialog(ExoticaBox);
- END {displayexotica};
-
- PROCEDURE ProcessExotica;
- VAR
- MyNumber : integer;
- Pushed : integer;
- i : integer;
- Str : string[255];
-
- PROCEDURE DisplayCoverSheet;
- CONST
- w = 39;
- h = 16;
- VAR
- s : ARRAY [1..12] OF string[35];
- Box : dialog_ptr;
- OK : integer;
-
- PROCEDURE DrawBox;
- VAR
- i, x, y : integer;
- BEGIN
- s[1] := 'Penultimate Printer Setter Upper';
- s[2] := ' Version 1.0';
- s[3] := ' by';
- s[4] := ' Merlin L. Hanson';
- s[5] := ' Genie : M.L.HANSON';
- s[6] := ' 1832 Noble Road';
- s[7] := ' Arden Hills, Mn 55112';
- s[8] := ' ';
- s[9] := ' Portions of the product are';
- s[10] := 'Copyright 1986, OSS and CCD.';
- INSERT (CHR(189),s[10],11 );
- s[11] := ' Used by Permission of OSS.';
- s[12] := ' OK ';
- Box := New_Dialog(12, 0,0,w,h);
- x := 3; y := 1;
- FOR i := 1 TO 11 DO
- MakeText(Box,x,y + i, 34, s[i]);
- x := 17; y := 14;
- OK := Add_DItem(Box,G_Button,
- Selectable | Exit_Btn | Default,
- x,y,4,1, NoBorder,Blk);
- Set_DText(Box,OK,s[12],System_Font,TE_Left);
- END {drawbox};
-
- BEGIN {displaycoversheet}
- End_Dialog(ExoticaBox);
- DrawBox;
- Center_Dialog(Box);
- OK := Do_Dialog(Box,0);
- End_Dialog(Box);
- END {displaycoversheet};
-
- PROCEDURE ToggleCutSheet(Nbr1,Nbr2: integer);
- {Select Nbr1, de-select Nbr2}
- BEGIN
- Obj_SetState(ExoticaBox,ExoticButtonArr[Nbr2],Normal,TRUE);
- Obj_SetState(ExoticaBox,ExoticButtonArr[Nbr1],Selected,TRUE);
- END {toglecutsheet};
-
- BEGIN {processexotica}
- Pushed := Do_Dialog(ExoticaBox,ExoticButtonArr[19]);
- WHILE Pushed <> ExoticButtonArr[13] DO
- BEGIN
- {Convert from GEM to my number}
- FOR i := 1 TO 20 DO
- IF ExoticButtonArr[i] = Pushed THEN
- MyNumber := i;
- (*WriteLn('my number:',mynumber);*)
- CASE MyNumber OF
- 6 : WriteLn('print CC was called.');
- 7 : BEGIN
- DisplayCoversheet;
- Obj_SetState(ExoticaBox,ExoticButtonArr[7],
- Normal,FALSE);
- END;
- 11 : ToggleCutSheet(11,12);
- 12 : ToggleCutSheet(12,11);
- END {case};
- CASE MyNumber OF
- 7 : Pushed := Do_Dialog (ExoticaBox,0);
- OTHERWISE : Pushed := Redo_Dialog(ExoticaBox,0);
- END {case};
- END {while};
- Get_DEdit(ExoticaBox,ExoticButtonArr[19],Str);
- (*WriteLn('str:',ORD(str[1]));*)
- IF Str[1] In ['a'..'z', 'A'..'Z'] THEN
- CmdFileName[11] := Str[1];
- (*Writeln('new file name:',cmdfilename);*)
- {De-select the exit button.}
- Obj_SetState(ExoticaBox,ExoticButtonArr[13],
- Normal,TRUE);
- END {processexotica};
-
- PROCEDURE FillExoticaCC;
- VAR
- i : integer;
- CC : PACKED ARRAY[1..30] OF char;
- Str : string[255];
- Nbr : integer;
-
- FUNCTION TestButton
- (Nbr : integer)
- : boolean;
- BEGIN
- IF Obj_State(ExoticaBox,ExoticButtonArr[Nbr])
- & Selected <> 0
- THEN TestButton := TRUE
- ELSE TestButton := FALSE;
- END {testbutton};
-
- BEGIN {fillexoticaCC}
- i := 1;
- {right margin}
- IF TestButton(1)
- THEN
- BEGIN
- Get_DEdit(ExoticaBox,ExoticButtonArr[20],Str);
- StringToInteger(Str,Nbr,3);
- CC[i] := CHR(ESC);
- CC[i + 1] := 'Q';
- CC[i + 2] := CHR(Nbr);
- i := i + 3;
- END;
- {unidirectional mode}
- IF TestButton(2) THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'U';
- CC[i + 2] := CHR(1);
- i := i + 3;
- END;
- {graphics character set}
- IF TestButton(3) THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 'm';
- CC[i + 2] := CHR(4);
- i := i + 3;
- END;
- {half-speed mode}
- IF TestButton(4) THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := 's';
- CC[i + 2] := CHR(1);
- i := i + 3;
- END;
- {cut-sheet feeder}
- IF TestButton(12) THEN
- BEGIN
- CC[i] := CHR(ESC);
- CC[i + 1] := CHR(25);
- CC[i + 2] := CHR(4);
- i := i + 3;
- END;
- IF i > 1 THEN
- NbrCharOfExotica := i - 1;
- {Now put data in global array}
- ExoticaCC := CC;
- END {fillexoticaCC};
-
- BEGIN {showexotica}
- IF NOT ExoticaDrawn THEN
- BEGIN
- DisplayExotica;
- ExoticaDrawn := TRUE;
- END;
- ProcessExotica;
- FillExoticaCC;
- FormPrinterCommands;
- (*PrintCommandCodes;*)
- End_Dialog(ExoticaBox);
- END {showexotica};
-
- PROCEDURE HelpMenu;
-
- CONST
- w = 60;
- h = 20;
- VAR
- HelpBox : dialog_ptr;
- s : ARRAY [1..20] OF string[55];
- i, Pushed, junk : integer;
-
- PROCEDURE HelpNbr2;
- CONST
- w = 60;
- h = 20;
- VAR
- Help2 : dialog_ptr;
- i,junk,pushed : integer;
- s : ARRAY[1..20] OF string[55];
- BEGIN
- s[1] := 'Remember to position the paper (vertically)';
- s[2] := 'before you make your final exit.';
- s[3] := 'Note that the RESET state of skip perforations';
- s[4] := 'is OFF.';
- s[5] := 'The initial displays conform to the RESET state.';
- s[6] := 'Printer switches may override some choices.';
- s[20] := ' RETURN ';
- Help2 := New_Dialog(20, 0,0,w,h);
- FOR i := 1 TO 6 DO
- MakeText(Help2,5,i, 52,s[i]);
- junk := Add_DItem(Help2,G_Button,
- Selectable | Exit_Btn | Default,
- 26,18,8,1, NoBorder,Blk);
- Set_DText(Help2,junk,s[20],System_Font,TE_Left);
- Center_Dialog(Help2);
- Pushed := Do_Dialog(Help2,0);
- End_Dialog(Help2);
- END {helpnbr2};
-
- BEGIN {helpmenu}
- s[1] := 'The margins are specified in number of characters. ';
- s[2] := 'The right margin is specified from the *left* side. ';
- s[3] := ' PITCHES in characters per inch. ';
- s[4] := ' NLQ 10.0 ';
- s[5] := ' Pica 10.0 ';
- s[6] := ' Elite 12.0 ';
- s[7] := ' Compressed 17.16 ';
- s[8] := ' Compressed Elite 20.0 ';
- s[9] := 'You can not CANCEL after printing a test line. ';
- s[10] := 'Some of the interactions between choices are not ';
- s[11] := 'shown. In particular, NLQ overrides several ';
- s[12] := 'choices on print style. ';
- s[13] := 'Be sure the printer is on and ready to print. ';
- s[14] := 'When using the editable numeric fields, provide a ';
- s[15] := 'digit in all positions, using leading zeroes ';
- s[16] := 'if needed. ';
- s[20] := ' MORE ';
- HelpBox := New_Dialog(20, 0,0,w,h);
- FOR i := 1 TO 16 DO
- MakeText(HelpBox, 5, i, 52,s[i]);
- junk := Add_DItem(HelpBox,G_Button,Selectable | Default |Exit_Btn,
- 26,18,6,1, NoBorder,Blk);
- Set_DText(HelpBox,junk,s[20],System_Font,TE_Left);
- Center_Dialog(HelpBox);
- Pushed := Do_Dialog(HelpBox,0);
- End_Dialog(HelpBox);
- HelpNbr2;
- END {helpmenu};
-
- PROCEDURE TestPrint;
- BEGIN
- FormPrinterCommands;
- SendCommandsToPrinter;
- PrintTwoLines;
- ButtonSelected[32] := FALSE;
- Obj_SetState(Box,ButtonArr[32],Normal,TRUE);
- Obj_SetState(Box,ButtonArr[34],Disabled,TRUE);
- END {testprint};
-
- PROCEDURE FormFeed;
- CONST
- FF = 12; {ASCII}
- BEGIN
- FormPrinterCommands;
- SendCommandsToPrinter;
- WriteLn(CHR(FF));
- ButtonSelected[33] := FALSE;
- Obj_SetState(Box,ButtonArr[33],Normal,TRUE);
- Obj_SetState(Box,ButtonArr[34],Disabled,TRUE);
- END {formfeed};
-
- PROCEDURE SaveFile;
- BEGIN
- FormPrinterCommnds;
- SndCommandsToFile;
- ButtonSelected[39] := FALSE;
- Obj_SetState(Box,ButtonArr[39],Normal,TRUE);
- END {savefile};
-
- BEGIN {processbuttonpush}
- CASE MyNumber OF
- 15,16,17 : ChangeMutuallyExclusive(MyNumber,15,17,Box);
- 19,20,21,22 : ChangeMutuallyExclusive(MyNumber,19,22,Box);
- 23,24 : ChangeMutuallyExclusive(MyNumber,23,24,Box);
- 37,38 : ChangeMutuallyExclusive(MyNumber,37,38,Box);
- 32 : TestPrint;
- 33 : FormFeed;
- 36 : ShowInternationalMenu;
- 39 : SaveFile;
- 41 : BEGIN {exotica}
- End_Dialog(Box);
- ShowExotica;
- Obj_SetState(Box,ButtonArr[41],Normal,FALSE);
- BoxRedrawNeeded := TRUE;
- END;
- 42 : BEGIN {help}
- End_Dialog(Box);
- HelpMenu;
- Obj_SetState(Box,ButtonArr[42],Normal,FALSE);
- BoxRedrawNeeded := TRUE;
- END;
- 2,3,4,5, {pitch}
- 7,8, {boldness}
- 12,13, {effects}
- 10, {NLQ}
- 29 {skip perforations}
- : BEGIN {do nothing} END;
- END {case};
- END {processbuttonpush};
-
- PROCEDURE ProcessAllNumericFields;
- VAR
- Str : string[255];
- i : integer;
- BEGIN
- FOR i := 50 TO 54 Do
- BEGIN
- Get_DEdit(Box,ButtonArr[i],Str);
- StringToInteger(Str,EditNumber[i],2);
- END;
- Get_DEdit(Box,ButtonArr[55] {n/216 spacing},Str);
- StringToInteger(Str,EditNumber[55],3);
- EditNumber[53] := 0;
- (*For i := 50 to 55 Do
- writeln(i,':',editnumber[i]);*)
- END {processallnumericfields};
-
- FUNCTION Done : boolean;
- BEGIN
- Done := FALSE;
- {return}
- IF Pushed = ButtonArr[35] THEN
- Done := TRUE;
- {cancel}
- IF (Pushed = ButtonArr[34]) AND
- (Obj_State(Box,ButtonArr[34]) & Disabled = 0)
- THEN
- Done := TRUE;
- END {done};
-
- BEGIN {displayoptions}
- FillStringsWithText;
- Box := New_Dialog(50, 0,0,w,h);
- {title}
- x := 18; y := 1;
- MakeText(x, y, 32,title);
-
- {pitch}
- x := 5; y := 2;
- MakeText(x + 3,y,8,s[1]);
- FOR i := 2 TO 5 DO
- ButtonArr[i] := MakeButton(x, y + i -1, 11, s[i],FALSE);
- {boldness}
- x := 4; y := 8;
- MakeText(x + 2,y,8,s[6]);
- FOR i := 7 TO 8 DO
- ButtonArr[i] := MakeButton(x, y + i - 6, 13,s[i],FALSE);
- {effects}
- x := 5; y := 12;
- MakeText(x + 1,y,8,s[11]);
- FOR i := 12 TO 13 DO
- ButtonArr[i] := MakeButton(x,y + i - 11,10, s[i],FALSE);
- {script}
- x := 25; y := 2;
- MakeText(x,y,7,s[14]);
- FOR i := 15 TO 17 DO
- ButtonArr[i] := MakeButton(x,y + i - 14, 6,s[i],TRUE);
- {line spacing}
- x := 22; y := 7;
- MakeText(x,y,7,s[18]);
- FOR i := 19 TO 22 DO
- ButtonArr[i] := MakeButton(x + 2,y + i -18, 8,s[i],TRUE);
- ButtonArr[55] := Add_DItem(Box,G_FText,Editable,
- x + 11, y + 4, 3,1, NoBorder,Blk);
- Set_DEdit(Box,ButtonArr[55],
- '___','999','___',
- System_Font,TE_Left);
- {paper out sensor}
- x := 21; y := 13;
- MakeText(x,y,18,s[38]);
- FOR i := 23 TO 24 DO
- ButtonArr[i] := MakeButton(x + 5,y + i - 22, 5,s[i],TRUE);
- {form}
- x := 40; y := 2;
- MakeText(x + 2,y ,6,s[25]);
- ButtonArr[37] := MakeButton (x , y + 1, 2, ' ',TRUE);
- ButtonArr[38] := MakeButton (x , y + 2, 2, ' ',TRUE);
- ButtonArr[50] := GetEditableLine(x + 5, y + 1, 2, '11');
- ButtonArr[51] := GetEditableLine(x + 5, y + 2, 2, '__');
- ButtonArr[52] := GetEditableLine(x + 5, y + 3, 2, '_6');
- MakeText(x + 9, y + 1,8, s[26]);
- MakeText(x + 9, y + 2,8, s[27]);
- MakeText(x + 9, y + 3,8, s[28]);
- ButtonArr[29] := MakeButton(x,y + 5, 19,s[29],FALSE);
- {left margin}
- x := 44; y := 9;
- MakeText(x,y,13,s[30]);
- ButtonArr[54] := GetEditableLine(x + 5,y + 1, 2,'_0');
- {NLQ}
- x := 5; y := 16;
- ButtonArr[10] := MakeButton(x + 2,y,5,s[10],FALSE);
-
- {do and return}
- x := 42; y := 12;
- MakeText(x + 1, y,15, s[31]);
- FOR i := 32 TO 33 DO
- ButtonArr[i] := MakeButton(x,y + i - 31, 16, s[i],TRUE);
-
- {character set}
- x := 42; y := 16;
- ButtonArr[36] := MakeButton(x, y, 16,s[36],TRUE);
- {exotica}
- ButtonArr[41] := MakeButton(x, y + 1, 16,s[41],TRUE);
- InitializeButtons;
- { ------ bottom line ----------}
- x := 6; y := 19;
- {help}
- ButtonArr[42] := MakeButton(x + 6,y,6,s[42],TRUE);
- {cancel}
- ButtonArr[34] := MakeButton(x + 14,y,8,s[34],TRUE);
- {do it}
- ButtonArr[35] := Add_DItem(Box,G_Button,
- Selectable | Exit_Btn | Default,
- x + 25, y, 7, 1, NoBorder,Blk);
- Set_DText(Box,ButtonArr[35],s[35],System_Font,TE_Left);
- {save file}
- ButtonArr[39] := MakeButton(x + 34,y,11,s[39],TRUE);
-
- {done with set up}
- Init_Mouse; {Get rid of bee.}
- BoxRedrawNeeded := FALSE;
- Center_Dialog(Box);
- Pushed := Do_Dialog(Box,0);
-
- { ----------------------- Edit loop ---------------------- }
- WHILE NOT Done DO
- BEGIN
- ProcessAllNumericfields;
- FillButtonSelectedArray;
- ConvertGEMNbrToMyNbr(Pushed,MyNumber);
- ProcessButtonPush;
- CASE BoxRedrawNeeded OF
- TRUE : BEGIN
- BoxRedrawNeeded := FALSE;
- Pushed := Do_Dialog(Box,0);
- END;
- FALSE : Pushed := Redo_Dialog(Box,0);
- END {case};
- END {while};
- End_Dialog(Box);
-
- { --------------------- end edit loop ---------------------- }
- IF Pushed <> ButtonArr[34] {cancel} THEN
- BEGIN
- FillButtonSelectedArray;
- ProcessAllNumericFields;
- FormPrinterCommands;
- SendCommandsToPrinter;
- IF 1 IN DebugSet THEN
- PrintCommandCodes;
- END;
- END {displayoptions};
-
- BEGIN {do_main}
- DebugSet := [];
- CmdFileName := KCmdFileName;
- FOR i := 1 TO 70 DO
- ButtonArr[i] := 0;
- Rewrite(output,'prn:');
- NationCode := 0;
- ExoticaDrawn := FALSE;
- DisplayOptions;
- END {do_main};
-
- BEGIN {main}
- IF Init_GEM >= 0 THEN
- BEGIN
- Do_Main;
- Exit_GEM;
- END;
- END.
-